import ADC0832
import time
import numpy as np
import matplotlib.pyplot as plt

def init():
    ADC0832.setup()
    
def loop():
    # 取 256 点数据做 FFT
    fft_size=256       # 256-point FFT

    # 这是采样频率 = 5350Hz
    # 所以说，课程给出的参考采样频率和我们小组分析实验结果估算出的结果一致
    # 可见我们的实验报告，实验一分析
    sampl_freq=3700  # Sampling frequency
    
    # 进行信号采样，共 256 点数据
    n=0
    y=[]
    t=time.time()
    while n<fft_size:
        digitalVal=ADC0832.getResult()
        n=n+1
        y.append(3.3*float(digitalVal)/255)
    t=time.time()-t

    # 在程序中，通过采样个数除以所用总时间，顺便可计算出真实的采样频率
    sampl_freq = fft_size/t # Calculate the actual sampling freq.

    # 对有限长实信号做快速傅立叶变换，得到 fft_size/2+1 个复数
    # 其中 y_fft[0] 是直流分量，y_fft[1] 到 y_fft[fft_size/2] 是正频率分量
    y_fft=np.fft.rfft(y)    # Real signal, Energy Scaled FFT

    # 只绘制幅度谱
    y_fft_ampl=np.abs(y_fft)    # Amplitude spectrum

    x=np.linspace(0,t,fft_size)

    # 计算频谱上每一点的真实频率
    freq=np.linspace(0,sampl_freq/2,int(fft_size/2+1))

    plt.figure(figsize=(8,4))
    plt.subplot(211)
    plt.plot(x,y)
    plt.xlabel(u"t(s)")
    plt.title(u"Time domain")
    plt.subplot(212)
    plt.plot(freq,y_fft_ampl)
    plt.xlabel(u"freq(Hz)")
    plt.title(u"Frequency domain")
    plt.subplots_adjust(hspace=0.4)
    plt.show()

if __name__=='__main__':
    init()
    loop()
    ADC0832.destroy()
    print("The end!")